package com.company.二叉树;

/**
 * @author zhangjian
 * @data 2023/4/9
 * @Version 1.0
 * @Descripion
 */
public class CreateTree_01 {
    TreeNode root = null;

    TreeNode getRoot() {
        return root;
    }

    public static void main(String[] args) {

        int[] datas = {72, 37, 29, 55, 51, 80};

        CreateTree_01 biTree = CreateTree_01.createBiTree(datas);

    }

    static CreateTree_01 createBiTree(int[] datas) {
        CreateTree_01 create = new CreateTree_01();
        for (int data : datas) {
            create.buildBiTree(create.getRoot(), data);
        }
        return create;
    }

    private void buildBiTree(TreeNode node, int data) {
        // 如果根节点为空，设置根节点，并且设置数据域
        if (root == null) {
            root = new TreeNode(data);
        } else {
            /**
             * 如果根节点不为空，判断数据与当前节点的大小
             */
            // 如果当前节点大于数据data，说明此data是当前节点的左子树
            if (data < node.getData()) {
                // 判断左叶子节点是否为空
                if (node.getLeft() == null) {
                    //左叶子结点为空,设置左叶子结点,并且设置数据
                    node.setLeft(new TreeNode(data));
                } else {
                    //左叶子结点不为空,递归调用构建二叉树的函数
                    buildBiTree(node.getLeft(), data);
                }
            } else {
                //  如果当前节点小于数据data，说明此data是当前节点的右子树
                // 判断当前结点是否存在右叶子结点
                if (node.getRight() == null) {
                    //右叶子结点为空,设置右叶子结点,并且设置数据域
                    node.setRight(new TreeNode(data));
                } else {
                    //右叶子几点不为空,递归调用构建二叉树的函数
                    buildBiTree(node.getRight(), data);
                }
            }
        }
    }
}
